package com.ruoyi.system.mapper;

import com.ruoyi.system.api.domain.SysCompany;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 公司管理 数据层
 *
 * @author ruoyi
 */
public interface SysCompanyMapper {
    /**
     * 查询公司管理数据
     *
     * @param company 公司信息
     * @return 公司信息集合
     */
    public List<SysCompany> selectCompanyList(SysCompany company);

    /**
     * 根据角色ID查询公司树信息
     *
     * @param roleId               角色ID
     * @param companyCheckStrictly 公司树选择项是否关联显示
     * @return 选中公司列表
     */
    public List<Long> selectCompanyListByRoleId(@Param("roleId") Long roleId, @Param("companyCheckStrictly") boolean companyCheckStrictly);

    /**
     * 根据公司ID查询信息
     *
     * @param companyId 公司ID
     * @return 公司信息
     */
    public SysCompany selectCompanyById(Long companyId);

    /**
     * 根据ID查询所有子公司
     *
     * @param companyId 公司ID
     * @return 公司列表
     */
    public List<SysCompany> selectChildrenCompanyById(Long companyId);

    /**
     * 根据ID查询所有子公司（正常状态）
     *
     * @param companyId 公司ID
     * @return 子公司数
     */
    public int selectNormalChildrenCompanyById(Long companyId);

    /**
     * 是否存在子节点
     *
     * @param companyId 公司ID
     * @return 结果
     */
    public int hasChildByCompanyId(Long companyId);

    /**
     * 查询公司是否存在用户
     *
     * @param companyId 公司ID
     * @return 结果
     */
    public int checkCompanyExistUser(Long companyId);

    /**
     * 校验公司名称是否唯一
     *
     * @param companyName 公司名称
     * @param parentId    父公司ID
     * @return 结果
     */
    public SysCompany checkCompanyNameUnique(@Param("companyName") String companyName, @Param("parentId") Long parentId);

    /**
     * 新增公司信息
     *
     * @param company 公司信息
     * @return 结果
     */
    public int insertCompany(SysCompany company);

    /**
     * 修改公司信息
     *
     * @param company 公司信息
     * @return 结果
     */
    public int updateCompany(SysCompany company);

    /**
     * 修改所在公司正常状态
     *
     * @param companyIds 公司ID组
     */
    public void updateCompanyStatusNormal(Long[] companyIds);

    /**
     * 修改子元素关系
     *
     * @param companys 子元素
     * @return 结果
     */
    public int updateCompanyChildren(@Param("companys") List<SysCompany> companys);

    /**
     * 删除公司管理信息
     *
     * @param companyId 公司ID
     * @return 结果
     */
    public int deleteCompanyById(Long companyId);
}
